package com.ctshk.rpc.finance.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.rpc.finance.dto.bill.BillListDTO;
import com.ctshk.rpc.finance.dto.bill.BillRefundInfoDTO;
import com.ctshk.rpc.finance.dto.bill.BillRefundListDTO;
import com.ctshk.rpc.finance.dto.bill.BillToConfirmListDTO;
import com.ctshk.rpc.finance.req.bill.*;

import java.util.List;

/**
 * <p>
 * 财务收款及退款单 服务类
 * </p>
 *
 * @author 叶冠峰
 * @since 2021-03-26
 */
public interface IFinanceBillService  {

    /**
     * 认款列表
     * @param req
     * @return
     */
    Result<PageResponse<BillListDTO>> list(BillListReq req);

    /**
     * 待确认列表
     * @param req
     * @return
     */
    Result<PageResponse<BillToConfirmListDTO>> toConfirmList(BillToConfirmListReq req);

    /**
     * 批量ID获取列表
     * @param req
     * @return
     */
    Result<PageResponse<BillToConfirmListDTO>> batchIdList(BillBatchIdListListReq req);

    /**
     * 根据认款ID获取列表
     * @param req
     * @return
     */
    Result<PageResponse<BillToConfirmListDTO>> confirmList(BillConfirmIdListReq req);

    /**
     * 客户对账-客户未对账列表
     * @param req
     * @return
     */
    Result<PageResponse<BillToConfirmListDTO>> customUncheckList(BillCustomIdListReq req);

    /**
     * 对账详情-关联认款列表
     * @param req
     * @return
     */
    Result<PageResponse<BillToConfirmListDTO>> checkList(BillCheckIdListReq req);

    /**
     * 销售订单退款列表
     * @param req
     * @return
     */
    Result<PageResponse<BillRefundListDTO>> refundList(BillRefundListReq req);

    /**
     * 销售订单退款-退款信息
     * @param req
     * @return
     */
    Result<BillRefundInfoDTO> refundInfo(BillIdReq req);

    /**
     * 销售订单退款-退款
     * @param req
     * @return
     */
    Result refund(BillRefundReq req);

    /**
     * 销售订单退款-确认
     * @param req
     * @return
     */
    Result confirmRefund(BillIdReq req);

    /**
     * 新增收款认款(内部接口)
     * @param req
     * @return
     */
    Result addCollection(List<BillAddCollectionReq> req);

    /**
     * 新增退款认款(内部接口)
     * @param req
     * @return
     */
    Result addRefund(List<BillAddRefundReq> req);

    /**
     * 操作退款(内部接口)
     * @param req
     * @return
     */
    Result operateRefund(BillOperateRefundReq req);

    /**
     * 再次确认(内部接口)
     * @param req
     * @return
     */
    Result reConfirm(BillOperateRefundReq req);

    /**
     * 退款-退款信息
     * @param req
     * @return
     */
    Result<BillRefundInfoDTO> addRefundInfo(BillIdReq req);
}
